
package database;

import java.sql.*;
import java.util.ArrayList;
import app.Propiedad;

public class PropiedadDAO {
	public PropiedadDAO(Connection con) throws SQLException {
		st = con.createStatement();
	}
	
	public boolean insertar(Propiedad prop){
		
		try {
			ResultSet rs;
			rs = st.executeQuery("select max(id) from propiedad where usuario='" + prop.getUsuario() +"'");
			if (rs.next())
				prop.setId(rs.getInt(1) + 1);
			else
				prop.setId(0);
			st.executeUpdate("INSERT INTO Propiedad VALUES	('"+prop.getId()+"', "+
															"'"+prop.getUsuario()+"', "+
															"'"+prop.getTipo()+"', "+
															"'"+prop.getDimension()+"', "+
															"'"+prop.getDireccion()+"', "+
															"'"+prop.getPrecio()+"', "+
															"'"+prop.getValidado()+"')");
		}
		catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}

	public boolean eliminar(Propiedad prop){
		
		try {
			st.executeUpdate(	"DELETE "+
								"FROM Propiedad "+
								"WHERE id='"+prop.getId()+"' AND usuario='"+prop.getUsuario()+"'");
		}
		catch (SQLException e){
			e.printStackTrace();
			return false;
		}

		return true;
	}

	public boolean actualizar(Propiedad prop){
		/*Por ahora vale asi xD*/
		return (eliminar(prop) && insertar(prop));
	}
	
	public ArrayList<Propiedad> listar (ArrayList<String> criterio)
    {
		ArrayList<Propiedad> propiedades = new ArrayList<Propiedad> ();
		
		StringBuffer strb = new StringBuffer();
		int i = 0;
		
		if (criterio.size () != 0)
			strb.append("WHERE ");
		
        while (i != criterio.size ())
        {
        	if (criterio.get(i) == "Dimension maxima")
        	{	
        		strb.append("dimension<" + criterio.get(i + 1));
        		i += 2;
        	}
        	else if (criterio.get(i) == "Dimension entre")
        	{
        		strb.append("dimension BETWEEN " + criterio.get(i + 1) + " AND " + criterio.get(i + 2));
        		i += 3;
        	}
        	else if (criterio.get(i) == "Dimension minima")
        	{
        		strb.append("dimension>" + criterio.get(i + 1));
        		i += 2;
        	}
        	else if (criterio.get(i) == "Precio maximo")
        	{
        		strb.append("precio<" + criterio.get(i + 1));
        		i += 2;
        	}
        	else if (criterio.get(i) == "Precio entre")
        	{
        		strb.append("precio BETWEEN " + criterio.get(i + 1) + " AND " + criterio.get(i + 2));
        		i += 3;
        	}
        	else if (criterio.get(i) == "Precio minimo")
        	{
        		strb.append("precio>" + criterio.get(i + 1));
        		i += 2;
        	}
        	else if (criterio.get(i) == "Tipo inmueble")
        	{
        		strb.append("tipo=" + criterio.get(i + 1));
        		i += 2;
        	}
        	
        	if (i != criterio.size ())
        		strb.append(" AND ");
        }
		
        String criterioBusqueda = new String (strb);
        ResultSet rs;
            
        try {
            rs = st.executeQuery ("SELECT * " +
                                  "FROM propiedad " +
                                  criterioBusqueda);

            while (rs.next ())
	        {
	            Propiedad prop = new Propiedad ();
	
	            prop.setId (rs.getInt ("id"));
	            prop.setTipo (rs.getInt ("tipo"));
	            prop.setDimension (rs.getDouble ("dimension"));
	            prop.setDireccion (rs.getString ("direccion"));
	            prop.setPrecio (rs.getDouble ("precio"));
	            prop.setUsuario (rs.getString ("usuario"));
	            prop.setValidado (rs.getBoolean ("validado"));
	
	            propiedades.add (prop);
	        }
	
	        return propiedades;
        } catch (SQLException e) {
            e.printStackTrace ();
            return null;
        }
    }


	private Statement st;
}
